#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define MaxSize 50
#define N 10
typedef int ElemType;
typedef struct SeqList{
    ElemType data[MaxSize];
    int length;
}SeqList;
// 初始化数组：给数组中填充元素
void initList(SeqList &S,int length){
    S.length = length;
    srand(time(NULL));// 生成随机数
    for(int i=0;i<S.length;i++){
        S.data[i] = rand()%100;
    }
}
// 遍历数组中的数据
void printList(SeqList S){
    for (int i = 0; i < S.length; ++i) {
        printf("%d ",S.data[i]);
    }
    printf("\n");
}

// 归并操作
void Merge(ElemType E[],int low,int mid,int high){
    static ElemType B[N];
    int i,j,k;
    // 将所有元素复制到数组中
    for(k=low;k<=high;k++){
        B[k] = E[k];
    }
    for(i=low,j=mid+1,k=i;i<=mid && j<=high;k++){
        // 获取较小的元素，然后存放到数组E中
        if(B[i]<=B[j]){
            E[k] = B[i++];
        }else{
            E[k] = B[j++];
        }
    }
    // 将左半部分剩余元素都放到集合中
    while(i<=mid){
        E[k++] = B[i++];
    }
    // 将右半部分剩余元素都放到集合中
    while(j<=high){
        E[k++] = B[j++];
    }
}
// 归并排序
void MergeSort(ElemType E[],int low,int high){
    if(low < high){
        int mid = (low + high)/2; // 将数组从中间划分
        MergeSort(E,low,mid); // 对左半部分进行归并排序
        MergeSort(E,mid+1,high); // 对右半部分进行归并排序
        Merge(E,low,mid,high); // 合并数据
    }
}
int main() {
//    SeqList S;
//    initList(S,10);
//    printList(S);
//    MergeSort(S.data,0,S.length-1);
//    printList(S);

    int a[3] = {3,7,8};
    int *p = a;
    int j;
    j = *p++; // 相当于j=*p，p++。指针加1是指向下一个元素所在的地址
    // a[0]=3,j=3,*p=7
    printf("a[0]=%d,j=%d,*p=%d,p[0]=%d\n",a[0],j,*p,p[0]);
    j=p[0]++;
    // a[1]=8,j=7,*p=8,p[0]=8
    printf("a[1]=%d,j=%d,*p=%d,p[0]=%d\n",a[1],j,*p,p[0]);
    return 0;
}
